apache 配置静态缓存

        这里的静态文件指的是图片、js、css等文件,用户访问一个站点,其实大多数元素都是图片、js、css等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@lamp ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>

        测试配置是否成功,并重启apache 服务

1
2
3
[root@lamp ~]# apachectl -t
Syntax OK
[root@lamp ~]# apachectl graceful

        用curl 测试

1
2
3
4
5
6
7
8
9
10
[root@lamp ~]# curl -x127.0.0.1:80 'http://www.test.com/static/image/common/logo.png' -IHTTP/1.1 200 OK
Date: Thu, 05 Jan 2017 06:33:18 GMT
Server: Apache/2.2.31 (Unix) PHP/5.6.6
Last-Modified: Tue, 31 May 2016 03:08:36 GMT
ETag: "2854b-1149-5341ab0597500"
Accept-Ranges: bytes
Content-Length: 4425
Cache-Control: max-age=86400
Expires: Fri, 06 Jan 2017 06:33:18 GMT
Content-Type: image/png

        或者使用mod_headers 模块实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<IfModule mod_headers.c>
#htm,html,txt 类的文件缓存一小时
<filesmatch "\.(html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch>
#css,js,swf 类的文件缓存一个星期
<filesmatch "\.(cssl|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch>
#jpg,gif,jpeg,png,ico,flv,pdf 类的文件缓存一年
<filesmatch "\.(jpg|gif|jpeg|png|ico|flv|pdf)$">
header set cache-control "max-age=29030400"
</filesmatch>
</IfModule>

        说明:这里的时间单位可以是days,hours,甚至是min,两种不同的方法,要想使用这些模块,必须要事先已经支持。查看是否支持命令:

1
[root@lamp ~]# /usr/local/apache2/bin/apachectl -M